/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.edu.upc.dew.serviciosmultiples.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import pe.edu.upc.dew.serviciosmultiples.exception.DAOException;
import pe.edu.upc.dew.serviciosmultiples.model.Servicio;
import pe.edu.upc.dew.serviciosmultiples.model.Tecnico;
import pe.edu.upc.dew.serviciosmultiples.model.Solicitud;

/**
 *
 * @author bcano
 */
public class TecnicoDAOImpl extends BaseDAO implements TecnicoDAO {

    private DataSource dataSource;

    public DataSource getDataSource() {
        return dataSource;
    }

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public List<Tecnico> buscarTecnicoServicio(Solicitud solicitud) throws DAOException {
//        String query = "select t.idTecnico, t.nombre, t.apellido, s.descripcion"
//                     + " from tecnico t inner join servicio s"
//                     + " on t.idServicio = s.idServicio"
//                     + " where t.idServicio =?";
        
//                String query = "select t.idTecnico, t.nombre, t.idServicio from tecnico t left join solicitud s on"
//                      +" t.idTecnico = s.idTecnico"
//                      +" where t.idTecnico not in"
//                      +" (select so.idTecnico from solicitud so"
//                      +" where so.horas =? and so.fechaSolicitud <> str_to_date(?, '%Y-%m-%d'))" 
//                      +" and t.idServicio = ?";

//        String query = "select t.idTecnico, t.nombre, t.apellido, sv.descripcion from tecnico t left join solicitud s on"
//                      +" t.idTecnico = s.idTecnico inner join servicio sv on t.idServicio = sv.idServicio"
//                      +" where t.idTecnico not in"
//                      +" (select so.idTecnico from solicitud so"
//                      +" where so.horas =? and so.fechaSolicitud <> ?)"
//                      +" and t.idServicio = ?";

        String query = "select t.idTecnico,t.nombre,t.apellido,s.descripcion from tecnico t"
                      +" inner join servicio s on t.idservicio=s.idservicio"
                      +" where t.idservicio = ?";

        Connection con = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        List<Tecnico> lista = new ArrayList<Tecnico>();

        try {
            con = dataSource.getConnection();
            stmt = con.prepareStatement(query);
//            stmt.setString(1, solicitud.getHoras());
//            stmt.setDate(2, solicitud.getFechaSolicitud());
            stmt.setInt(1, solicitud.getServicio().getIdServicio());
            rs = stmt.executeQuery();
            while (rs.next()) {
                Tecnico vo = new Tecnico();
                vo.setIdTecnico(rs.getInt("idTecnico"));
                vo.setNombre(rs.getString("nombre"));
                vo.setApellido(rs.getString("apellido"));

                Servicio serVo = new Servicio();
                serVo.setDescripcion(rs.getString("descripcion"));
                vo.setServicio(serVo);

                lista.add(vo);
            }
        } catch (SQLException e) {
            System.err.println(e.getMessage());
            throw new DAOException(e.getMessage());
        } finally {
            this.cerrarResultSet(rs);
            this.cerrarStatement(stmt);
            this.cerrarConexion(con);
        }
        System.out.println("lista tecnicos: " + lista.size());
        return lista;
    }

}
